LinuC-1 - 101試験 - 1.04:リポジトリとパッケージ管理 - 1.04.4 RPMパッケージ管理

Last Update : August 21 2022 17:47:20

     

a. RPMによるパッケージ管理

RPM(RedHat Package Manager)はレッドハットが開発したパッケージ管理のためのソフトウェアです。 RPMでは、関連したファイルはソフトウェアの種類ごとにグループ化されてパッケージとしてまとめられ、パッケージ単位で検索、インストール、アップグレード、アンインストール、検査などの管理ができます。
RPMには重要な機能の1つとして、パッケージ間の依存関係のチェック機能があります。

  • パッケージAのインストール時、パッケージAに必要なパッケージBがまだインストールされていない場合は、その旨表示します
  • パッケージAのアンインストール時、パッケージAを必要とするほかのパッケージBがある場合はその旨表示します

RPMはシステムにインストールされたパッケージの情報を/var/lib/rpmディレクトリの下のBerkeley DBで管理しています。このBerkeley DBの検索インデックスが一部壊れることがあり、その場合の修復オプションを覚えておくと役に立ちます。
修復コマンド: rpm --rebuilddb

パッケージには、パッケージのダイジェストとパッケージの情報を保持するヘッダのダイジェストが含まれており、この値と計算したダイジェストを比較すると、パッケージ内容の改ざんの有無を検査できます。

また、作成者の秘密鍵でパッケージとヘッダに署名することができます。パッケージの利用者は作成者が署名した秘密鍵と対の公開鍵により、署名が本物かどうかを調べ、パッケージが正当なものであるかどうかを検証できます。署名に使用する秘密鍵/公開鍵はGPGにより生成、管理されます。
(注)GPG(GNU Privacy Guard)は、公開鍵暗号PGP(Pretty Good Privacy)の標準仕様であるOpenPGPのGNUによる実装です。 デフォルトでは、パッケージのインストール時にダイジェストのチェックと署名チェックが行われます。

RPMパッケージのパッケージファイル名は、
  パッケージ名-バージョン-リリース番号.アーキテクチャ.拡張子
となります
例えば、
zsh-4.2.6-1.i386.rpm
となります。


1.RPMコマンドを用いたパッケージ管理

パッケージのインストールやアンインストールを行うには、rpm コマンドを使用します。インストールの際は依存関係のあるパッケージ(動作に必要な他のパッケージ)を調べ、もしシステムにそれらパッケージが存在しない場合は、そのことをユーザーに通知します。また、アンインストールする際に、そのパッケージが他パッケージと依存関係がある(他のパッケージの動作に必要とされる)場合には、アンインストールできない旨を通告します。さらに、既にシステムにインストール済みのパッケージをチェックすることも可能です。
パッケージのインストール、アンインストール、アップデートには管理者権限が必要です。


● rpm コマンド構文
  rpm [オプション] [パッケージファイル名]

● 基本オプション
 -i パッケージのインストール
 -U パッケージのアップグレード
 -e, --erase=<package>+ パッケージの削除(アンインストール)
 -V, --verify パッケージの検証
 -q パッケージ情報の表示

● 全モード共通オプション
 -v, --verbose より詳細な出力を提供します。
 --quiet 詳細でない出力を提供します
 --version 使用している rpm のバージョンを表示します。

● インストール(-i)/アップグレード(-U)/アンインストール(-e) オプション
 --force 強制的にパッケージを上書きする
 --oldpackage 古いパッケージに置き換える
 --nodeps パッケージの依存関係の検証を行いません
 --test テストインストールする(実際にインストールは行わない)
 --replacefiles ファイルが既に存在する場合、置き換える
 --noscripts パッケージ指定のスクリプトを実行しない
 --root --root <ディレクトリ名>で、作業ディレクトリを指定する
 --prefix --prefix <ディレクトリ名>でパッケージをインストールするディレクトリを指定する
 --reLocate --reLocate <旧ディレクトリ名=新ディレクトリ名>で、インストール済みのパッケージをディレクトリを変更して再インストールする(i と併用)
 -F, --freshen=<packagefile>+ 既にインストール済みの場合のみアップグレード
 -h, --hash パッケージをインストールにつれて '#' を表示します (-v と使用する)
 --nomd5 MD5チェックサムによるファイル改竄の可能性の有無をチェックしません(Vと併用)

● 問い合わせオプション(-q)
 -c, --configfiles 全ての設定ファイルを列挙します
 -d, --docfiles 全てのドキュメントファイルを列挙します
 --dump 基本的なファイル情報をダンプします
 -l, --list パッケージ中のファイルを列挙します
 -R, --requires 指定されたパッケージが依存しているパッケージを表示する。
 -a, --all インストールされている全てのパッケージを一覧で表示する。
 -p 未インストールのパッケージファイルに対して問合せを行なう。

● 検証オプション(-V)
 --nofiles パッケージ中のファイルを検証しません
 --nodeps パッケージの依存関係を検証しません
 --nomd5
 --nofiledigest
ファイルダイジェストの検証をしません


2.RPMパッケージの新規インストール「-ivh」

rpmパッケージを新規インストールするには「-i 」(install)オプションを使用します。「-v 」(Verbose)はインストールの詳細情報を表示させるオプション、「-h」(hash)は進捗状況をハッシュマーク(#)で表示してくれます。 なお、「-vv」とvを2つ使用することによってさらに詳細な進捗状況を表示させることができます。

# rpm -ivh telnet-server-0.17-23.i386.rpm
Preparing... ###############################[100%] 1:telnet-server ###############################[100%]


3.RPMパッケージのアップグレード「-Uvh」

RPMパッケージのアップグレードを行う場合は、「-U」(Upgrade)オプションを使用します。対象とするパッケージがインストールされているかわからない場合には、「-U」を「-i 」の代用として使用します。なお、旧バージョンに戻したい場合には「--oldpackage」オプションを用いて、
「rpm -Uvh --oldpackage 旧パッケージ名」のようにします。-U はシステムに同じパッケージが存在しない場合には、通常のインストールを行います。-F オプションと区別して使用するようにします。

# rpm -Uvh telnet-server-0.17-23.i386.rpm
Preparing... ###############################[100%] 1:telnet-server ###############################[100%]


4.RPMパッケージのアップグレード「-Fvh」

-U オプション同様RPMパッケージのアップグレードを行いますが、システムに同じパッケージが存在しない場合は、インストールを行いません。-U オプションと区別して使用するようにします。

# rpm -Fvh telnet-server-0.17-23.i386.rpm
Preparing... ###############################[100%] 1:telnet-server ###############################[100%]


5.RPMパッケージのバージョンを表示する「-q」

RPMパッケージのバージョンを表示したい場合には、「-q」」(query)オプションを使用します。全てのインストール済みのパッケージを表示させるには「-qa」オプションを用います。

# rpm -q telnet
telnet-0.17-23


6.RPMパッケージの詳細情報を表示する「-qi」

RPMパッケージの詳細な情報を表示したい場合には、「-i 」(Infomation)オプションを併用し、
-qi」のように使用します。なお、-qip とすることでインストール前のRPMパッケージの詳細情報が表示されます。表示される情報は、-qi 実行時と同様のものです。

# rpm -qi samba
Name : samba Relocations: (not relocatable) Version : 3.6.9 Vendor: CentOS Release : 151.el6 Build Date: 2013年02月22日 13時03分33秒 Install Date: 2013年04月02日 12時45分57秒 Build Host: c6b7.bsys.dev.centos.org Group : System Environment/Daemons Source RPM: samba-3.6.9-151.el6.src.rpm Size : 18533164 License: GPLv3+ and LGPLv3+ Signature : RSA/SHA1, 2013年02月24日 02時53分34秒, Key ID 0946fca2c105b9de Packager : CentOS BuildSystem <http://bugs.centos.org> URL : http://www.samba.org/ Summary : Server and Client software to interoperate with Windows machines Description : Samba is the suite of programs by which a lot of PC-related machines share files, printers, and other information (such as lists of available files and printers). The Windows NT, OS/2, and Linux operating systems support this natively, and add-on packages can enable the same thing for DOS, Windows, VMS, UNIX of all kinds, MVS, and more. This package provides an SMB/CIFS server that can be used to provide network services to SMB/CIFS clients. Samba uses NetBIOS over TCP/IP (NetBT) protocols and does NOT need the NetBEUI (Microsoft Raw NetBIOS frame) protocol.


7.インストールされたRPMパッケージのディレクトリを調べる「-ql」

「-l 」(list)オプションをつけると、インストールされたRPMパッケージに含まれるファイルを調べることができます。インストールする前に予め、どのようなファイルがインストールされるかを調べるには、-ql とします。

# rpm -ql telnet-server
/etc/xinetd.d/telnet /usr/sbin/in.telnetd /usr/share/man/man5/issue.net.5.gz /usr/share/man/man8/in.telnetd.8.gz /usr/share/man/man8/telnetd.8.gz


8.インストールされたRPMパッケージの設定ファイルを調べる「-qc」

「-c 」オプションをつけると、RPMパッケージのインストールに同時にインストールされた設定ファイルを調べることができます。

# rpm -qc samba
/etc/logrotate.d/samba /etc/pam.d/samba /etc/samba/smbusers


9.RPMパッケージのアンインストール「-e」

RPMパッケージをアンインストールするには、「-e」(erase)オプションを使用します。アンインストールする際に、依存関係を無視して削除する場合は、「--nodeps」オプションを付け加えます。

# rpm -e telnet-0.17-23


10.RPMパッケージファイルの検証「-V」

パッケージのインストール後にパッケージのファイルをどのように書き換えたかを検証するには「-V」オプションを使用します。問題がなければ、「.......」のようにドットで表示されます。-V オプションを利用することでRPMデータベースに記録されている内容と実際にインストールされているファイルが一致しているかどうか調べることができるので、ファイルが改竄されていないかどうか、しかるべきファイルサイズでインストールされているかどうかをチェックすることができるので重宝します。また、インストール時にあったファイルが見つからない場合は、missing と表示されます。インストールされている全てのパッケージを検査するには、-Va オプションを使用します。

# rpm -V telnet-server S.5....T c /etc/xinetd.d/telnet

なお、変更が加えられていない場合は、「.......」のように表示されますが、変更が加えられている場合には、「S」や「T」、「5」のような検証コードが表示されます。以下にこれら検証コードの意味について記載しておきます。

 S ファイルサイズが異なっている
 5 MD5チェックサムが異なる
 L シンボリックリンクが変更されている
 T ファイルの更新時刻が変更されている
 D デバイスファイルが変更されている
 U ファイルの所有者が変更されている
 G ファイルの所有グループが変更されている
 M ファイルのパーミッションが変更されている


11.指定されたファイルのパッケージを表示する「-qf」

# rpm -qf /etc/rndc.key bind-9.2.1-16


12.RPMパッケージからファイルを抽出する「rpm2cpio」

RPMから特定のファイルを抽出できるコマンドとして、rpm2cpio があります。これを使うことでインストールせずに必要なファイルを抽出して利用したり、ディレクトリ構成が前もって把握できるのでとても重宝します。以下のコマンドでは、どのようなファイルが格納されているかを調べます。rpm -qlp と同様の意味になります。

# rpm2cpio mt-daapd-0.2.1.1-1.fc3.i386.rpm | cpio --list

実際に抽出するには以下のようにします。まず、ディレクトリを作成し、そこを作業用ディレクトリとします。コマンド実行後は階層ごとにファイルが抽出されます。

# mkdir mt-daap # cd mt-daap # rpm2cpio ~/mt-daapd-0.2.1.1-1.fc3.i386.rpm | cpio -id

特定のファイルだけを抽出するには、
例として、mt-daapd.confを取り出すには、

# rpm2cpio mt-daapd-0.2.1.1-1.fc3.i386.rpm | cpio -ivd ./etc/mt-daapd.conf



z. 出題範囲概要

概要 :
  • RPMパッケージツールを使用してパッケージ管理できる。

詳細 :
  • リポジトリの概念を理解している。
  • RPMパッケージのバージョン、状態、依存関係、整合性と署名などの情報を取得する。
    rpm
  • パッケージがどのファイルを提供するか、また、特定のファイルがどのパッケージから提供されるかを取得できる。

  [ 例題 ] 


         

    www.it-shikaku.jp